<?php
require_once dirname(__FILE__) . '/../facebook/src/facebook.php';
require_once dirname(__FILE__) . '/../users/User.php';
require_once dirname(__FILE__) . '/../users/UsersModel.php';

class FBLoginModel {
	private $facebook;
	private $usersModel;

	public function __construct(Facebook $fb, UsersModel $um) {
		$this->facebook = $fb;
		$this->usersModel = $um;
	}
	
	/**
	* Logga ut användaren
	*/
	public function logout() {
	  $this->facebook->destroySession();
	}
	
	/**
	* @return bool
	*/
	public function isLoggedIn() {
		if ($this->getLoggedInUserFromFb() !== null) {
			return true;
		}
		return false;
	}
	
	/**
	* Hämta information från facebook om vilken användare som är inloggad. User-objektet har då inte alla
	* medlemsvariabler satta
	*
	* @return User (null om användaren inte längre är inloggad)
	*/
	public function getLoggedInUserFromFb() {
		$user = $this->facebook->getUser();

		if ($user !== 0) {
			try {
				$user_profile = $this->facebook->api('/me');
			} catch (FacebookApiException $e) {}
			
			return User::create($user_profile['id'], $user_profile['first_name'] ,$user_profile['last_name']);			
		}
		
		return null;
	}

	/**
	* Hämta inloggade användaren från databasen
	*
	* @return User (null om användaren inte är registrerad på sidan)
	*/
	public function getLoggedInUserFromDb() {
		if ($this->isRegistered()) {
			$user = $this->getLoggedInUserFromFb();

			return $this->usersModel->getUser($user->username);
		}
		
		return null;
	}

	/**
	* Hämtar användarrollen i form av bit-flaggor (se UserModel)
	*
	* @return int (bit-flags, 0 om inte användaren är registrerad)
	*/
	public function getUserRole() {
		$user = $this->getLoggedInUserFromDb();

		if ($user) {
			// gör en cast till inte för säkerhets skull, eftersom bitvisa operationer på strängar 
			// kan ge icke intuitiva resultat.
			return (int)$user->role;
		}
		return 0;
	}
	
	/**
	* Kollar om den aktuella användaren är registrerad i databasen
	*
	* @return bool
	*/
	public function isRegistered() {
		if ($this->getLoggedInUserFromFb() === null) {
			return false;
		}

		return $this->usersModel->userExists($this->getLoggedInUserFromFb()->username);
	}
}

